package com.module.ble.db

import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import androidx.room.RawQuery
import androidx.sqlite.db.SupportSQLiteQuery
import com.module.ble.db.table.UserHeartEntryTime
import kotlinx.coroutines.flow.Flow

/**
 *
 * 作者：sosou
 *
 * 版本：1.0
 *
 * 创建日期：2025/3/28
 *
 * 描述：
 *
 * 修订历史：
 *
 */
@Dao
interface HeartEntryTimeDao {

    @Delete
    fun delete(data: UserHeartEntryTime)

    @Query("SELECT * FROM heart_entry_time WHERE createdTime = :time")
    fun findByTime(time :String): UserHeartEntryTime?

    @Query("select * from heart_entry_time")
    fun findAll(): MutableList<UserHeartEntryTime>

    @Query("SELECT * FROM heart_entry_time")
    fun findAllFlow(): Flow<List<UserHeartEntryTime>>

    @Query("select count(*) from heart_entry_time")
    fun count(): Int

    @Insert(onConflict = OnConflictStrategy.REPLACE)//新数据更新旧数据
    fun insertOrUpdate(vararg bean: UserHeartEntryTime)

    // 查询hasHeartRate为1的所有数据
    @Query("SELECT * FROM heart_entry_time WHERE hasHeartRate = 1")
    fun findByHasHeartRate(): List<UserHeartEntryTime>

    // 查询hasHeartRate为1的所有数据（Flow版本）
    @Query("SELECT * FROM heart_entry_time WHERE hasHeartRate = 1")
    fun findByHasHeartRateFlow(): Flow<List<UserHeartEntryTime>>

    // 通用方法：根据字段名查询该字段为1的所有数据
    @RawQuery
    fun findByFieldValue(query: SupportSQLiteQuery): List<UserHeartEntryTime>

    // 通用方法：根据字段名查询该字段为1的所有数据（Flow版本）
    @RawQuery(observedEntities = [UserHeartEntryTime::class])
    fun findByFieldValueFlow(query: SupportSQLiteQuery): Flow<List<UserHeartEntryTime>>
}